import matplotlib.pyplot as plt
import re
from collections import Counter

# 设置matplotlib字体，支持中文显示
import matplotlib
matplotlib.rcParams['font.family'] = ['SimHei']  # 黑体

# 使用一段模拟的中文文本，代替网页爬取内容
text_content = """
信息学院召开第四次全体教职工大会

2024年9月29日，交通信息学院在文景校区明远楼1812会议室召开国庆节前全体教职工大会，全体教职工参加了本次会议。

在会议上。副院长刘小飞重点安排了教学方面的各项工作。副院长牛亚莉就专项工作进行了安排部署。学生科科长侯月担负责安排了学生管理方面的工作。党总支副书记徐建元对下一步工作作了具体安排和部署。

本次会议提出五项要求，一是做好教职工节前教学管理，授课教师完成自身工作的同时，督促学生认真学习。二是加强实验室安全管理，做好实验室使用登记，保障实验设备安全。三是做好学生思想引导工作，稳步推进学生安全教育。四是做好即将到来的实训实习工作，确保各项工作安排有序进行。五是督促学生按时返校。

会议强调，全体教职工要以饱满的精神状态和良好的精神面貌迎接国庆假期，确保节日期间学院各项工作顺利进行。
"""

print(f"文本内容长度: {len(text_content)} 字符")

# 保存提取的文本，便于检查
with open('mock_text.txt', 'w', encoding='utf-8') as f:
    f.write(text_content)

# 第三部分：分词和统计
print("正在进行分词统计...")
words = []

# 匹配连续的中文字符(2个及以上)
matches = re.findall(r'[\u4e00-\u9fa5]{2,}', text_content)
print(f"找到 {len(matches)} 个连续中文字符串")

# 提取词语
for word in matches:
    if len(word) == 2:
        words.append(word)
    else:
        for i in range(len(word)-1):
            words.append(word[i:i+2])  # 2字词
            if i+3 <= len(word):
                words.append(word[i:i+3])  # 3字词
            if i+4 <= len(word):
                words.append(word[i:i+4])  # 4字词

print(f"总共提取了 {len(words)} 个词语")
print(f"不同词语数量: {len(set(words))}")

# 输出词语示例
print("词语示例:")
sample_words = list(set(words))[:10]
for w in sample_words:
    print(w, end=" ")
print()

# 统计词频
word_counter = Counter(words)

# 输出词频统计结果
print("\n词频统计结果（前10个）:")
top_words = word_counter.most_common(10)
for word, count in top_words:
    print(f"{word}: {count}次")

# 保存词频统计结果到文件
with open('mock_word_counts.txt', 'w', encoding='utf-8') as f:
    for word, count in word_counter.most_common():
        f.write(f"{word}: {count}次\n")
print("词频统计结果已保存到 mock_word_counts.txt")

# 第四部分：可视化展示
print("正在生成可视化图表...")
# 获取出现频率最高的5个词
top_five_words = top_words[:5]
x = [item[0] for item in top_five_words]
y = [item[1] for item in top_five_words]

# 创建图形
plt.figure(figsize=(10, 6))
colors = ['#FF9999', '#66B3FF', '#99FF99', '#FFCC99', '#FF99CC']
plt.bar(x, y, color=colors)
plt.xticks(rotation=45)

# 添加标题和标签
plt.title("文本中出现频率最高的5个词")
plt.xlabel("词语")
plt.ylabel("出现次数")
plt.tight_layout()

# 在柱子上方显示数值
for i, v in enumerate(y):
    plt.text(i, v + 0.5, str(v), ha='center')

# 保存图表
plt.savefig('mock_word_frequency.png')
print("图表已保存为 mock_word_frequency.png")

# 显示图形
plt.show() 